//Copyright (c) Microsoft Corporation.  All rights reserved.

#pragma once

namespace  Microsoft { namespace WindowsAPICodePack { namespace DirectX { namespace WindowsImagingComponent {

using namespace System;

/// <summary>
/// Describes size of the bitmap.
/// </summary>
public ref struct BitmapSize
{
public:
    /// <summary>
    /// The width of the bitmap in pixels.
    /// </summary>
    property unsigned int Width
    {
        unsigned int get()
        {
            return this->width;
        }
        void set(unsigned int value)
        {
            this->width = value;
        }
	}

    /// <summary>
    /// The height of the bitmap in pixels.
    /// </summary>
    property unsigned int Height
    {
        unsigned int get()
        {
            return this->height;
        }
        void set(unsigned int value)
        {
            this->height = value;
        }
	}

internal:
	BitmapSize( unsigned int width, unsigned int height )
	{
		this->width = width;
		this->height = height;
	}
	
private:
	unsigned int width;
	unsigned int height;
};


/// <summary>
/// Describes dots per inch resolution of the bitmap.
/// </summary>
public ref struct BitmapResolution
{
public:
    /// <summary>
    /// The horizontal resolution of the bitmap.
    /// </summary>
	property double DpiX
    {
        double get()
        {
            return this->dpiX;
        }
        void set(double value)
        {
            this->dpiX = value;
        }
	}

    /// <summary>
    /// The vertical resolution of the bitmap.
    /// </summary>
    property double DpiY
    {
        double get()
        {
            return this->dpiY;
        }
        void set(double value)
        {
            this->dpiY = value;
        }
	}

internal:
	BitmapResolution( double dpiX, double dpiY )
	{
		this->dpiX = dpiX;
		this->dpiY = dpiY;
	}
	
private:
	double dpiX;
	double dpiY;
};

/// <summary>
/// Describes a rectangle of bitmap data.
/// </summary>
public ref struct BitmapRectangle
{
public:
    /// <summary>
    /// The horizontal component of the top left corner of the rectangle.
    /// </summary>
    property int X
    {
        int get()
        {
            return this->x;
        }
        void set(int value)
        {
            this->x = value;
        }
	}

    /// <summary>
    /// The vertical component of the top left corner of the rectangle.
    /// </summary>
    property int Y
    {
        int get()
        {
            return this->y;
        }
        void set(int value)
        {
            this->y = value;
        }
	}

    /// <summary>
    /// The width of the rectangle.
    /// </summary>
    property int Width
    {
        int get()
        {
            return this->width;
        }
        void set(int value)
        {
            this->width = value;
        }
	}

    /// <summary>
    /// The height of the rectangle.
    /// </summary>
    property int Height
    {
        int get()
        {
            return this->height;
        }
        void set(int value)
        {
            this->height = value;
        }
	}

internal:
	BitmapRectangle( int x, int y, int width, int height )
	{
		this->x = x;
		this->y = y;
		this->width = width;
		this->height = height;
	}
	
private:
	int x;
	int y;
	int width;
	int height;

};

} } } }
